package com.oro.domain;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.hibernate.validator.Email;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;

import com.oro.validator.hibernate.CodiceFiscale;
import com.oro.validator.hibernate.PartitaIva;

/**
 * Entity implementation class for Entity: Cliente
 * 
 */
@Entity
public class Cliente implements Serializable {

	private static final long serialVersionUID = 1L;
	@CodiceFiscale
	private String codiceFiscale;
	@NotNull(message = "Cognome can't be null")
	private String cognome;
	private Date dataNascita;
	private Date dataRegistrazione;
	@Length(max = 100)
	@Email
	private String email;
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	IndirizzoIT indirizzo;
	@NotNull(message = "Nome can't be null")
	private String nome;
	@PartitaIva
	private String partitaIva;
	private String telefonoCasa;
	private String telefonoLavoro;

	private String telefonoMobile;

	public Cliente() {
		super();
		indirizzo = new IndirizzoIT();
	}

	public Cliente(String nome, String cognome) {
		this();
		setNome(nome);
		setCognome(cognome);
	}

	public Cliente(String nome, String cognome, String telefonoCasa,
			String telefonoLavoro, String telefonoMobile, Date dataNascita,
			String codiceFiscale, String partitaIva) {
		this(nome, cognome);
		setTelefonoCasa(telefonoCasa);
		setTelefonoLavoro(telefonoLavoro);
		setTelefonoMobile(telefonoMobile);
		setDataNascita(dataNascita);
		setCodiceFiscale(codiceFiscale);
		setPartitaIva(partitaIva);
	}

	@Override
	public boolean equals(Object o) {
		if (this == o)
			return true;
		if (o == null)
			return false;
		if (!(o instanceof Cliente))
			return false;
		if (id != null)
			return id.equals(((Cliente) o).getId());
		else
			return codiceFiscale.equals(((Cliente) o).getCodiceFiscale());
	}

	public String getCodiceFiscale() {
		return this.codiceFiscale;
	}

	public String getCognome() {
		return this.cognome;
	}

	public Date getDataNascita() {
		return this.dataNascita;
	}

	public Date getDataRegistrazione() {
		return dataRegistrazione;
	}

	public String getEmail() {
		return email;
	}

	public Long getId() {
		return id;
	}

	public Indirizzo getIndirizzo() {
		return indirizzo;
	}

	public String getNome() {
		return this.nome;
	}

	public String getPartitaIva() {
		return this.partitaIva;
	}

	public String getTelefonoCasa() {
		return this.telefonoCasa;
	}

	public String getTelefonoLavoro() {
		return this.telefonoLavoro;
	}

	public String getTelefonoMobile() {
		return this.telefonoMobile;
	}

	public void setCodiceFiscale(String codiceFiscale) {
		this.codiceFiscale = codiceFiscale;
	}

	public void setCognome(String cognome) {
		this.cognome = cognome;
	}

	public void setDataNascita(Date dataNascita) {
		this.dataNascita = dataNascita;
	}

	public void setDataRegistrazione(Date dataRegistrazione) {
		this.dataRegistrazione = dataRegistrazione;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public void setIndirizzo(IndirizzoIT indirizzo) {
		this.indirizzo = indirizzo;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public void setPartitaIva(String partitaIva) {
		this.partitaIva = partitaIva;
	}

	public void setTelefonoCasa(String telefonoCasa) {
		this.telefonoCasa = telefonoCasa;
	}

	public void setTelefonoLavoro(String telefonoLavoro) {
		this.telefonoLavoro = telefonoLavoro;
	}

	public void setTelefonoMobile(String telefonoMobile) {
		this.telefonoMobile = telefonoMobile;
	}

}
